Object oriented and bytecode based software development platforms, including Sun Microsystems's Java and Microsoft's NET platform, have gained wide acceptance for developing Internet and Enterprise class software applications. Bytecode based software provides cross-platform and cross-language compatibility and eases the networked integration of software applications.
The above platforms further provide frameworks, including Sun Microsystems's RMI and Microsoft's NET Remoting, for invoking methods of remote objects and computers transparently. Remote method invocation frameworks hide the complexity and mechanics for preparing request and response messages, serializing arguments and return values, setting up and managing network connections, transporting the message over network links, and dispatching method invocations based on the request message. While the frameworks greatly simplify programming remote method invocations and stow away complexity, programmers frequently oversee costly usage of said remote invocations, causing poor performance and scalability.
Application performance is often a critical business factor and as such subject to optimization. Remote method invocations can significantly contribute to poor performance. Therefore, monitoring and diagnosing performance of remote method invocations is required to optimize source code, software architecture, and configuration of networked software applications.
There are several known types of monitoring remote method invocations. One of them is sniffing packets at the network level. Such network sniffing tools see due to their nature applications as a black-box and consequently lack application context information, which is required to relate remote method invocations to application internals. Another limitation of network sniffers is that they cannot alter the remote method invocations message, which prevents adding trace tags to the remote method invocation message. Also network sniffers cannot see remote method invocations if they are sent over encrypted communication channels.
Another type of monitoring tool is based on remote management protocols, including but not limited to SNMP, JMX, WBEM. Such remote management protocols are used to query aggregated performance information by use of monitoring agents. Monitoring agents require source code modifications for instrumenting the application. Due to the generic nature, performance metrics provided through such management interfaces are aggregated over different types and occurrences of remote method invocations. Furthermore, available performance metrics are pre-built into the application and cannot be changed at run-time. These metrics cannot be associated to particular application transactions that are on-the fly.
Another known type of monitoring remote method invocations is to enable remote method invocation logging of said application development frameworks. These log messages are intended for diagnosing remote method invocation errors rather than for diagnosing remote method invocation performance. As such, they lack required performance information including but not limited to message size, serialization cost information. Furthermore, log events are restricted to built-in events of the applications runtime platform.
A manual approach to capturing performance information of remote invocation calls is to add generation of log messages to the application source code. Modifying application source code requires deep programming and performance measurement knowledge, which may not be available in all situations where performance measurement is required. Altering the source code can introduce undesired application defects. Furthermore, access to source code is often not available. Altered source code of applications must be recompiled and redeployed. Redeployment may also require an undesired restart of the application, which in turn may increase application downtime.
Accordingly, a need exists for overcoming these shortcomings of the prior art.